package com.hqyj.server.controller;

import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import com.hqyj.server.domain.Users;
import com.hqyj.server.json.R;
import com.hqyj.server.service.UsersService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

@RestController
@RequestMapping("users")
public class UsersController {

    @Resource
    private UsersService usersService;


    @GetMapping("auth")
    public R login(HttpServletRequest request, @RequestParam("username") String username, @RequestParam("password") String password) {
        Users loginUser = null;
        try {
            //首先第一步检查验证是否正确；

            loginUser = usersService.adminLogin(username, password);
            if (loginUser != null) {

                StpUtil.login(loginUser.getUid());

                // 第2步，获取 Token  相关参数
                loginUser.setTokenName(StpUtil.getTokenName());
                loginUser.setTokenValue(StpUtil.getTokenValue());

                //Map<String,Object> tokenObj = JSONUtil.to
                //注意：保护用户的隐私，用户加密后的MD5密码不能返回前端。
                loginUser.setPassword("");

                //return success表示登录成了。
                return R.success("登录成功！", loginUser);
            }
            return R.fail("登录失败，请检查用户名或者密码是否正确！");
        } catch (Exception ex) {
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }


    //我编写一个专门用来判断用户是否已经登录的接口
    @GetMapping("isLogin")
    public R  checkIsLogin(){
        Users loginSuccessUser = null;

        try{
            if(StpUtil.isLogin()){
                Object loginIdObj =StpUtil.getLoginId();
                loginSuccessUser = usersService.getById(Integer.parseInt(loginIdObj.toString()));
                loginSuccessUser.setTokenName(StpUtil.getTokenName());
                loginSuccessUser.setTokenValue(StpUtil.getTokenValue());
                loginSuccessUser.setRoles(usersService.queryRolesListByUid(loginSuccessUser.getUid()));
                loginSuccessUser.setPassword("");
                return R.success("已登录",loginSuccessUser);
            }
            return R.fail("未登录",false);
        }catch (Exception ex){
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }



    @GetMapping("logout")
    public R logout(@RequestParam(value = "token", required = false) String token){
        try{
            System.out.println("----------执行用户注销---------");
            System.out.println("token:" + token);
            //调用sa-token用户注销方法即可。
            StpUtil.logout(); //执行用户注销....
            if(token!=null && !"".equals(token)){
                StpUtil.logoutByTokenValue(token);
            }
            return R.success("注销成功！");
        }catch(Exception ex){
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }

}
